<?php
declare(strict_types=1);

namespace app\common\model;

use app\common\traits\HasLanguage;
use think\Model;

class DictItem extends Model
{
    use HasLanguage;
    
    protected $pk = 'item_id';
    
    protected $autoWriteTimestamp = true;
    
    // 定义需要多语言处理的字段
    protected $langFields = ['name', 'remark'];
    
    // 自动完成
    protected $insert = ['sort' => 0, 'status' => 1];
    
    // 字段类型转换
    protected $type = [
        'sort' => 'integer',
        'dict_id' => 'integer'
    ];
    
    /**
     * 关联字典主表
     */
    public function dict()
    {
        return $this->belongsTo(Dict::class, 'dict_id', 'dict_id');
    }
    
    /**
     * 关联语言表
     */
    public function langs()
    {
        return $this->hasMany(DictItemLang::class, 'item_id', 'item_id')
            ->field(['item_lang_id', 'item_id', 'language_id', 'name', 'remark'])
            ->order('language_id', 'asc');
    }
    
    /**
     * 搜索器：按名称搜索
     * @param $query
     * @param $value
     */
    public function searchNameAttr($query, $value)
    {
        if ($value) {
            // 获取当前语言ID
            $langId = self::getCurrentLanguageId();
            
            // 通过子查询获取匹配的item_id
            $subQuery = DictItemLang::where('language_id', $langId)
                ->whereLike('name', "%{$value}%")
                ->field('item_id')
                ->select()
                ->toArray();

            $subQuery = array_column($subQuery, 'item_id');

            // 主查询匹配item_id
            $query->whereIn('item_id', $subQuery);
        }
    }
    
    /**
     * 搜索器：按状态搜索
     * @param $query
     * @param $value
     */
    public function searchStatusAttr($query, $value)
    {
        if (isset($value) && $value !== '') {
            $query->where('status', (int)$value);
        }
    }
} 